# 散点图 - matplotlib绘制
import numpy as np
# 随机生成n个数据
n = 1000
x = np.random.randn(n)
y = np.random.randn(n)
# 使用 matplotlib 绘图
import matplotlib.pyplot as plt
plt.scatter(x,y,marker='*')
plt.show()

# 散点图 - seabron 绘制
import seaborn as sns
import pandas as pd
# 使用pandas库 进行数据格式转换
df = pd.DataFrame({'x':x,'y':y})
# seaborn 绘制散点图方法 jointplot
sns.jointplot(x='x',y='y',data=df,kind='scatter')
plt.show()


# 折线图 - matplotlib 绘制
# 数据准备
# 利用以下方法生成数据
# import random
# x = [random.randint(1,100) for i in range(11)]
# print(list(range(2000,2011)),x )
x = [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010]
y = [88, 79, 59, 9, 52, 94, 17, 50, 22, 55, 68]
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()

# 折线图 - seaborn 绘制
import seaborn as sns
import pandas as pd
df = pd.DataFrame({'x':x,'y':y}) # 数据结构化
# seaborn 绘制折线图方法 lineplot
sns.lineplot(x='x',y='y',data=df)
plt.show()

# 直方图

# 数据准备
import numpy as np
import random
import pandas as pd
# 生成一维数组
a = np.random.randn(100)
x = pd.Series(a) # Series 存放一维数组的数据格式
print(a,x)

#  matplotlib 绘制直方图
"""
使用plt.hist(x, bins=10)函数
参数x是一维数组，bins代表小区间的数量，默认是10。
"""
import matplotlib.pyplot as plt
plt.hist(x,bins=10)
plt.show()


# ⽤Seaborn画直⽅图：
'''
使用sns.distplot(x, bins=10, kde=True)函数
参数x是一维数组，bins代表直方图中的小区间数量，kde代表显示核密度估计，默认是True。
核密度估计是通过核函数来估计概率密度的方法。
'''
import seaborn as sns
sns.displot(x,kde=False)
plt.show()

# 显示用核函数估计概率密度
import seaborn as sns
# displot
# histplot
# kde = true displot 方法会有警告
# 根据警告 推荐使用histplot方法
sns.histplot(x, kde=True)
plt.show()

# 条形图
# 数据准备
import random
x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']
# print([random.randint(1,10) for i in range(5)])
y = [3, 9, 3, 5, 7]

# matplotlib 绘制条形图
# plt.bar(x, height)函数，参数x代表x轴的类别，height是y轴的数值
import matplotlib.pyplot as plt
plt.bar(x,y)
plt.show()

# seaborn 绘制条形图
# sns.barplot(x=None,y=None,data=None)函数；参数data为DataFrame类型
import seaborn as sns
import pandas as pd
df = pd.DataFrame({'x':x,'y':y})
# sns.barplot(x,y) 也能出图但是有警告 所以全改成 显式传参
# sns.barplot(x=x,y=y,data=df)
# 警告如下
'''
Pass the following variables as keyword args: x, y. 
From version 0.12, the only valid positional argument will be `data`, 
and passing other arguments without an explicit keyword will result in an error or misinterpretation.
'''
sns.barplot(x=x,y=y,data=df)
plt.show()

# 饼图
# matplotlib.pyplot.pie函数 绘制 饼图

# 数据
nums=[20,12,124,12,3]
lables = ['High-school', 'Bachelor', 'Master', 'Ph.d', 'Other']
# pie(x, labels=None)函数,x代表绘制饼图的数据，labels是缺省值，可以为饼图添加标签
import matplotlib.pyplot as plt
plt.pie(x=nums, labels=lables, autopct='%1.1f%%')
# autopct:设置圆内的文本 # '1.1f%'指图片上显示的数字格式，表示小数点前后位数# 另外两个%%是format格式的符号
plt.show()